With the advent of modeling methodologies such as the Unified Modeling Language (UML), developers of computer-based applications have been able to create system models and then employ tools that use the models to automatically generate application resources such as application programming interface (API) software for creating, accessing and modifying instances of model classes, as well as aspects of the persistence layer of an application, such as database structures. While it may be preferable from the point of view of those that work with models or perform analyses on models that models should be constructed in a way that makes them easy to understand and work with, models are often optimized for better system performance and other implementation considerations, resulting in models that are difficult to understand and work with.